求黄金分割法求解y=x^4-4*x^3-16*x+4的最小值

来源:百度知道 编辑:UC知道 时间:2024/05/13 06:39:46
希望能够尽早得到答复!
提交答案后有加分!

x^4 。。。是下单峰函数,最小值 在区间 [-10,10]。
黄金分割法 找 最小值,x 精度 1.0E-07

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double eq(double x)
{
double y;
double x3;
x3 = x * x * x;
y = x3 * x - 4.0 * x3 - 16.0 * x + 4.0;
return y;
}

void main()
{
double x1,x2,y1,y2,a,b,x;
int i,j,n=0;
a= -10.0; // 左边界
b = 10.0; // 右边界

Lab1:
x2 = a + 0.618 * (b - a);
y2 = eq(x2);

Lab2:
x1 = a + 0.382 * (b - a);
y1 = eq(x1);

Lab3:
if (fabs(b-a) < 1.0E-07) {
x = (a + b) / 2.0;
printf("x=%lf ymin=%lf \n",x,eq(x));
exit(0);
} else {
if (y1 < y2) {b=x2; x2 = x1; y2 = y1; goto Lab2;};
if (y1 == y2) {a = x1;b=x2; goto Lab1;};
if (y1 > y2) { a = x1;x1=x2;y1=y2;
x2 = a + 0.618*(b-a); y2=eq(x2);
goto Lab3;};
};
}

x=3.355295 ymin=-74.037759